From cdaeb44ee7e0611aaf6b6ffa830a8ea36facf2ed Mon Sep 17 00:00:00 2001 From: tee-too Date: Thu, 6 Apr 2017 16:18:07 +0200 Subject: [PATCH] Sort tests so that unit tests are run before integration tests Fix #3880 --- src/cargo/core/manifest.rs | 4 +-- src/cargo/ops/cargo_test.rs | 2 +- tests/bench.rs | 48 +++++++++++++++++----------------- tests/cross-compile.rs | 8 +++--- tests/test.rs | 52 ++++++++++++++++++++++++++++++++----- 5 files changed, 77 insertions(+), 37 deletions(-) diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index ad9a129af..81c8e9f6b 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -59,7 +59,7 @@ pub struct ManifestMetadata { pub badges: HashMap>, } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub enum LibKind { Lib, Rlib, @@ -101,7 +101,7 @@ impl LibKind { } } -#[derive(Debug, Clone, Hash, PartialEq, Eq)] +#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] pub enum TargetKind { Lib(Vec), Bin, diff --git a/src/cargo/ops/cargo_test.rs b/src/cargo/ops/cargo_test.rs index 1de437090..14b813b3b 100644 --- a/src/cargo/ops/cargo_test.rs +++ b/src/cargo/ops/cargo_test.rs @@ -70,7 +70,7 @@ fn compile_tests<'a>(ws: &Workspace<'a>, -> CargoResult> { let mut compilation = ops::compile(ws, &options.compile_opts)?; compilation.tests.sort_by(|a, b| { - (a.0.package_id(), &a.2).cmp(&(b.0.package_id(), &b.2)) + (a.0.package_id(), &a.1, &a.2).cmp(&(b.0.package_id(), &b.1, &b.2)) }); Ok(compilation) } diff --git a/tests/bench.rs b/tests/bench.rs index 99ddb8ccf..fdb16f370 100644 --- a/tests/bench.rs +++ b/tests/bench.rs @@ -243,17 +243,17 @@ fn bench_with_lib_dep() { execs().with_stderr(&format!("\ [COMPILING] foo v0.0.1 ({}) [FINISHED] release [optimized] target(s) in [..] -[RUNNING] target[/]release[/]deps[/]baz-[..][EXE] -[RUNNING] target[/]release[/]deps[/]foo-[..][EXE]", p.url())) +[RUNNING] target[/]release[/]deps[/]foo-[..][EXE] +[RUNNING] target[/]release[/]deps[/]baz-[..][EXE]", p.url())) .with_stdout(" running 1 test -test bin_bench ... bench: [..] 0 ns/iter (+/- 0) +test lib_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured running 1 test -test lib_bench ... bench: [..] 0 ns/iter (+/- 0) +test bin_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured @@ -353,17 +353,17 @@ fn external_bench_explicit() { execs().with_stderr(&format!("\ [COMPILING] foo v0.0.1 ({}) [FINISHED] release [optimized] target(s) in [..] -[RUNNING] target[/]release[/]deps[/]bench-[..][EXE] -[RUNNING] target[/]release[/]deps[/]foo-[..][EXE]", p.url())) +[RUNNING] target[/]release[/]deps[/]foo-[..][EXE] +[RUNNING] target[/]release[/]deps[/]bench-[..][EXE]", p.url())) .with_stdout(" running 1 test -test external_bench ... bench: [..] 0 ns/iter (+/- 0) +test internal_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured running 1 test -test internal_bench ... bench: [..] 0 ns/iter (+/- 0) +test external_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured @@ -403,17 +403,17 @@ fn external_bench_implicit() { execs().with_stderr(&format!("\ [COMPILING] foo v0.0.1 ({}) [FINISHED] release [optimized] target(s) in [..] -[RUNNING] target[/]release[/]deps[/]external-[..][EXE] -[RUNNING] target[/]release[/]deps[/]foo-[..][EXE]", p.url())) +[RUNNING] target[/]release[/]deps[/]foo-[..][EXE] +[RUNNING] target[/]release[/]deps[/]external-[..][EXE]", p.url())) .with_stdout(" running 1 test -test external_bench ... bench: [..] 0 ns/iter (+/- 0) +test internal_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured running 1 test -test internal_bench ... bench: [..] 0 ns/iter (+/- 0) +test external_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured @@ -600,17 +600,17 @@ fn lib_with_standard_name() { .with_stderr(&format!("\ [COMPILING] syntax v0.0.1 ({dir}) [FINISHED] release [optimized] target(s) in [..] -[RUNNING] target[/]release[/]deps[/]bench-[..][EXE] -[RUNNING] target[/]release[/]deps[/]syntax-[..][EXE]", dir = p.url())) +[RUNNING] target[/]release[/]deps[/]syntax-[..][EXE] +[RUNNING] target[/]release[/]deps[/]bench-[..][EXE]", dir = p.url())) .with_stdout(" running 1 test -test bench ... bench: [..] 0 ns/iter (+/- 0) +test foo_bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured running 1 test -test foo_bench ... bench: [..] 0 ns/iter (+/- 0) +test bench ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured @@ -722,8 +722,8 @@ fn bench_dylib() { [RUNNING] [..] -C opt-level=3 [..] [RUNNING] [..] -C opt-level=3 [..] [FINISHED] release [optimized] target(s) in [..] -[RUNNING] `[..]target[/]release[/]deps[/]bench-[..][EXE] --bench` -[RUNNING] `[..]target[/]release[/]deps[/]foo-[..][EXE] --bench`", dir = p.url())) +[RUNNING] `[..]target[/]release[/]deps[/]foo-[..][EXE] --bench` +[RUNNING] `[..]target[/]release[/]deps[/]bench-[..][EXE] --bench`", dir = p.url())) .with_stdout(" running 1 test test foo ... bench: [..] 0 ns/iter (+/- 0) @@ -744,8 +744,8 @@ test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured [FRESH] bar v0.0.1 ({dir}/bar) [FRESH] foo v0.0.1 ({dir}) [FINISHED] release [optimized] target(s) in [..] -[RUNNING] `[..]target[/]release[/]deps[/]bench-[..][EXE] --bench` -[RUNNING] `[..]target[/]release[/]deps[/]foo-[..][EXE] --bench`", dir = p.url())) +[RUNNING] `[..]target[/]release[/]deps[/]foo-[..][EXE] --bench` +[RUNNING] `[..]target[/]release[/]deps[/]bench-[..][EXE] --bench`", dir = p.url())) .with_stdout(" running 1 test test foo ... bench: [..] 0 ns/iter (+/- 0) @@ -871,18 +871,18 @@ fn bench_with_examples() { [RUNNING] `rustc [..]` [RUNNING] `rustc [..]` [FINISHED] release [optimized] target(s) in [..] -[RUNNING] `{dir}[/]target[/]release[/]deps[/]testb1-[..][EXE] --bench` -[RUNNING] `{dir}[/]target[/]release[/]deps[/]testbench-[..][EXE] --bench`", +[RUNNING] `{dir}[/]target[/]release[/]deps[/]testbench-[..][EXE] --bench` +[RUNNING] `{dir}[/]target[/]release[/]deps[/]testb1-[..][EXE] --bench`", dir = p.root().display(), url = p.url())) .with_stdout(" running 1 test -test bench_bench2 ... bench: [..] 0 ns/iter (+/- 0) +test bench_bench1 ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured running 1 test -test bench_bench1 ... bench: [..] 0 ns/iter (+/- 0) +test bench_bench2 ... bench: [..] 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured diff --git a/tests/cross-compile.rs b/tests/cross-compile.rs index 5569a850f..03dee0549 100644 --- a/tests/cross-compile.rs +++ b/tests/cross-compile.rs @@ -548,17 +548,17 @@ fn cross_tests() { .with_stderr(&format!("\ [COMPILING] foo v0.0.0 ({foo}) [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] -[RUNNING] target[/]{triple}[/]debug[/]deps[/]bar-[..][EXE] -[RUNNING] target[/]{triple}[/]debug[/]deps[/]foo-[..][EXE]", foo = p.url(), triple = target)) +[RUNNING] target[/]{triple}[/]debug[/]deps[/]foo-[..][EXE] +[RUNNING] target[/]{triple}[/]debug[/]deps[/]bar-[..][EXE]", foo = p.url(), triple = target)) .with_stdout(" running 1 test -test test ... ok +test test_foo ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured running 1 test -test test_foo ... ok +test test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured diff --git a/tests/test.rs b/tests/test.rs index f55c0bc98..66c2e9c41 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -346,18 +346,18 @@ fn test_with_lib_dep() { execs().with_status(0).with_stderr(format!("\ [COMPILING] foo v0.0.1 ({}) [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] -[RUNNING] target[/]debug[/]deps[/]baz-[..][EXE] [RUNNING] target[/]debug[/]deps[/]foo-[..][EXE] +[RUNNING] target[/]debug[/]deps[/]baz-[..][EXE] [DOCTEST] foo", p.url())) .with_stdout(" running 1 test -test bin_test ... ok +test lib_test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured running 1 test -test lib_test ... ok +test bin_test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured @@ -511,18 +511,18 @@ fn external_test_implicit() { execs().with_status(0).with_stderr(format!("\ [COMPILING] foo v0.0.1 ({}) [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] -[RUNNING] target[/]debug[/]deps[/]external-[..][EXE] [RUNNING] target[/]debug[/]deps[/]foo-[..][EXE] +[RUNNING] target[/]debug[/]deps[/]external-[..][EXE] [DOCTEST] foo", p.url())) .with_stdout(" running 1 test -test external_test ... ok +test internal_test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured running 1 test -test internal_test ... ok +test external_test ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured @@ -2782,3 +2782,43 @@ test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured ", cargo.to_str().unwrap()))); } + +#[test] +fn test_order() { + let p = project("foo") + .file("Cargo.toml", r#" + [project] + name = "foo" + version = "0.1.0" + "#) + .file("src/lib.rs", r#" + #[test] fn test_lib() {} + "#) + .file("tests/a.rs", r#" + #[test] fn test_a() {} + "#) + .file("tests/z.rs", r#" + #[test] fn test_z() {} + "#); + + assert_that(p.cargo_process("test").arg("--all"), + execs().with_status(0).with_stdout_contains("\ +running 1 test +test test_lib ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured + + +running 1 test +test test_a ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured + + +running 1 test +test test_z ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured +")); + +} -- 2.30.2